/**
 * 角色菜单关联实体定义
 * @description 定义角色菜单关联的数据结构和属性
 */
export interface SysRoleMenu extends Record<string, unknown> {
  /** 关联ID */
  id: number;
  /** 角色id */
  role_id: number;
  /** 菜单id */
  menu_id: number;
  /** 菜单半选状态: 0选中 1半选 */
  is_half: number;
  /** 创建时间 */
  time: number;
  /** 更新时间 */
  update_time: number;
  /** 是否删除 (0:未删除 1:已删除) */
  disabled: number;
}

/**
 * 创建角色菜单关联时的数据类型
 * @description 排除id字段的角色菜单关联数据
 */
export type CreateSysRoleMenuDto = Omit<SysRoleMenu, 'id'>;

/**
 * 更新角色菜单关联时的数据类型
 * @description 排除id和time字段的部分角色菜单关联数据
 */
export type UpdateSysRoleMenuDto = Partial<Omit<SysRoleMenu, 'id' | 'time'>>;

/**
 * 查询角色菜单关联时的数据类型
 * @description 用于查询条件的角色菜单关联数据
 */
export type SysRoleMenuQueryDto = Partial<
  Pick<SysRoleMenu, 'role_id' | 'menu_id' | 'is_half' | 'disabled'>
>;

/**
 * 角色菜单权限设置DTO
 * @description 用于批量设置角色菜单权限
 */
export interface RoleMenuPermissionDto {
  /** 角色ID */
  role_id: number;
  /** 菜单ID列表 */
  menu_ids: number[];
  /** 半选菜单ID列表 */
  half_menu_ids?: number[];
}

/**
 * 角色菜单树形结构
 * @description 用于前端展示的角色菜单树形数据
 */
export interface RoleMenuTreeDto {
  /** 角色ID */
  role_id: number;
  /** 选中的菜单ID列表 */
  checked_menu_ids: number[];
  /** 半选的菜单ID列表 */
  half_checked_menu_ids: number[];
}
